﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Threading;
using ABCat.Core.Plugins.DataProviders;
using ABCat.Core.Plugins.DataSets;

namespace ABCat.Core.Plugins.Catalog.GrouppingLogics
{
	public interface IGrouppingLogicPlugin : IPlugin, INotifyPropertyChanged
	{
		/// <summary>
		/// Название логики группировки
		/// </summary>
		string Name { get; }
		/// <summary>
		/// В данный момент выполняется асинхронная операция
		/// </summary>
		bool IsOnUpdate { get; }
		/// <summary>
		/// Начать асинхронное получение записей, включенных в группу
		/// </summary>
		/// <param name="dbContainer">Контейнер БД</param>
		/// <param name="group">Группа записей</param>
		/// <param name="completedCallback">Метод завершения операции</param>
		/// <param name="cancellationToken">Токен отмены операции</param>
		void BeginGetRecordsAsync(IDbContainer dbContainer, Group group, Action<IEnumerable<IAudioBook>, Exception> completedCallback, CancellationToken cancellationToken);
		/// <summary>
		/// Начать асинхронную генерацию дерева групп
		/// </summary>
		/// <param name="completedCallback">Метод завершения операции</param>
		/// <param name="cancellationToken">Токен отмены операции</param>
		void BeginGenerateGroupsAsync(Action<Group, Exception> completedCallback, CancellationToken cancellationToken);
	}
}